package com.terry.test3;

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

/**
 * 九宫格按键输入
 *
 * 模拟九宫格输入法，默认为数字模式，按‘ #’键可在数字模式和字符模式之间切换，字符模式时长按数字键可在候选字符中循环，按‘/’键延迟（相当于手指抬起，不再循环候选的字符）。输入为字符串，输出该输入法输入得到的文本。(200分)
 * 九宫格键盘布局为
 * [ 1,.?! ] [ 2ABC ] [ 3DEF ]
 * [ 4GHI ] [ 5JKL ] [ 6MNO ]
 * [ 7PQRS ] [ 8TUV ] [ 9WXYZ ]
 * [ 0 空格 ]
 * 样例1: 2#22/222
 * 输出: 2BC
 *
 * @author 小八
 * @date 2023年02月09日14:56
 */
public class Title9 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String input = scanner.nextLine();
        scanner.close();
        String result = getDisplayResult(input);
        System.out.println(result);
    }

    private static String getDisplayResult(String input) {
        Map<Character, String> characterStringMap = buildMap();
        boolean isNumber = true;
        StringBuffer stringBuffer = new StringBuffer();
        int inputLength = input.length();
        for (int i = 0; i < inputLength; i++) {
            char ch = input.charAt(i);
            // # 切换输入法
            if (ch == '#') {
                isNumber = !isNumber;
                continue;
            }
            // '/' 不拼接
            if (ch == '/') {
                continue;
            }
            // 数字直接拼接
            if (isNumber) {
                stringBuffer.append(ch);
                continue;
            }
            // 英文输入法拼接 空格
            if (ch == '0') {
                stringBuffer.append(" ");
                continue;
            }
            // 英文输入法时:统计重复字符数量
            int repeatCharNum = getRepeatCharNum(input, inputLength, ch, i);

            // 向右移动指针,将重复的字符剔除(连续重复字符最终只输入一个字符)
            i = i + repeatCharNum;
            // 1 对应 ",.", 2 对应 "abc" 等
            String ziMu = characterStringMap.get(ch);
            if (repeatCharNum > 0) {
                int i1 = repeatCharNum % ziMu.length();
                stringBuffer.append(ziMu.charAt(i1));
            } else {
                // 没有重复字母直接输出
                stringBuffer.append(ziMu.charAt(repeatCharNum));
            }
        }
        return stringBuffer.toString();
    }

    private static int getRepeatCharNum(String input, int inputLength, char ch, int i) {
        int repeatCharNum = 0;
        for (int j = i + 1; j < inputLength; j++) {
            char next = input.charAt(j);
            // '/'表示中断连续
            if (next == '/') {
                break;
            }
            // 当前字符不等于下一个字符
            if (ch != next) {
                break;
            }
            repeatCharNum++;
        }
        return repeatCharNum;
    }

    private static Map<Character, String> buildMap() {
        Map<Character, String> map = new HashMap<>();
        map.put('1', ",.");
        map.put('2', "abc");
        map.put('3', "def");
        map.put('4', "ghi");
        map.put('5', "jkl");
        map.put('6', "mno");
        map.put('7', "pqrs");
        map.put('8', "tuv");
        map.put('9', "wxyz");
        return map;
    }
}
